import torch
import sys
import torchaudio
import os

sys.path.append(r"D:\projects\tts\ChatTTS")
sys.path.append(r"D:\projects\tts\ChatTTS\ChatTTS")
sys.path.append(r"D:\projects\tts\ChatTTS\tools")
import ChatTTS
import time
# from IPython.display import Audio

custom_path = r"D:\projects\tts\ChatTTS"
chat = ChatTTS.Chat()
chat.load(compile=False, custom_path=custom_path)  # Set to True for better performance

# rand_spk = chat.sample_random_speaker()
def get_random_speaker():
    return chat.sample_random_speaker()

def text_to_speech(text: str, rand_spk, output_file: str = None) -> None:
    """将文本转换为语音并保存为WAV文件
    参数:
      text: 需要转换的文本内容
      output_file: 输出文件路径（默认为output.wav）
    """
    if output_file is None:
        output_file = f"temp/audio_{int(time.time())}.wav"

    params_infer_code = ChatTTS.Chat.InferCodeParams(
        spk_emb=rand_spk,
        temperature=0.3,
        top_P=0.7,
        top_K=20,
    )

    # 生成语音
    wavs = chat.infer([text], params_infer_code=params_infer_code)

    # 保存为WAV文件
    wav_tensor = torch.from_numpy(wavs[0]).unsqueeze(0)
    torchaudio.save(output_file, wav_tensor, 24000)
    return output_file


def clean_temp_folder(temp_dir: str = "temp") -> None:
    """删除temp文件夹中的所有文件（不处理子文件夹）"""
    if not os.path.exists(temp_dir):
        return

    for filename in os.listdir(temp_dir):
        file_path = os.path.join(temp_dir, filename)
        try:
            if os.path.isfile(file_path):  # 仅处理文件
                os.remove(file_path)
        except Exception as e:
            print(f"删除 {file_path} 失败: {e}")


# texts = ["ChatTTS 是一个开源的文本转语音工具，专门为对话场景设计，支持中英文两种语言。它可以生成自然流畅的语音，并且支持多说话人。以下是如何使用 ChatTTS 的详细步骤。"]
# rand_spk = chat.sample_random_speaker()
# print(rand_spk) # save it for later timbre recovery
#
# params_infer_code = ChatTTS.Chat.InferCodeParams(
#     spk_emb=rand_spk, # add sampled speaker
#     temperature=0.3,   # using custom temperature
#     top_P=0.7,        # top P decode
#     top_K=20,         # top K decode
# )
# wavs = chat.infer(texts,  params_infer_code=params_infer_code)
#
# wav_tensor = torch.from_numpy(wavs[0]).unsqueeze(0)
# torchaudio.save("output1.wav", wav_tensor, 24000)
if __name__ == "__main__":
    from audio_processor import AudioProcessor
    test_text= "罗村高级中学创办于 1959 年，前身为罗村中学。学校早期规模较小，随着教育事业发展不断成长。1995 年，高中部与初中部分离，专注高中教育，办学质量稳步提升。2006 年，学校晋升为广东省一级学校 ，2009 年被评为广东省教学水平优秀学校。多年来，它不断优化教学设施，强化师资队伍建设，积极推进教育改革，为社会培育了大量优秀人才，在南海区教育领域占据重要地位 。"
    tranf_text = AudioProcessor.replace_percent(test_text)
    path = text_to_speech(tranf_text, output_file="tranf.wav")
    print(path)